package com.heer.api;

import com.heer.api.ResponseData.ApiResponse;
import com.heer.api.constants.IConstants;
import com.heer.model.AdMainBean;
import com.heer.model.AdSiteBean;
import com.heer.model.ChuRuOrderBean;
import com.heer.model.CreateOrderBean;
import com.heer.model.CreateRechargeBean;
import com.heer.model.DataBean;
import com.heer.model.ForgetPasswordBean;
import com.heer.model.JoinUsBean;
import com.heer.model.LoginBean;
import com.heer.model.MyCardBean;
import com.heer.model.MyInvitedBean;
import com.heer.model.MyMsgBean;
import com.heer.model.MyWalletBean;
import com.heer.model.NewMsgNumBean;
import com.heer.model.OkBean;
import com.heer.model.OrderBean;
import com.heer.model.OrderStatusBean;
import com.heer.model.QrcodeAccess;
import com.heer.model.RegisterBean;
import com.heer.model.SidMoneyBean;
import com.heer.model.SiteBookedSelectedBean;
import com.heer.model.SiteOfferBean;
import com.heer.model.SitePlaceBookedBean;
import com.heer.model.SitePlaceCateBean;
import com.heer.model.SitePlaceInfoBean;
import com.heer.model.SiteTicketInfoBean;
import com.heer.model.SitesBean;
import com.heer.model.UserAvatarBean;
import com.heer.model.UserHobbyBean;
import com.heer.model.UserInfoBean;
import com.heer.model.VerificationBean;
import com.heer.model.WxPayBean;
import com.heer.model.WxUserBean;

import java.util.List;

import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import retrofit2.Call;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;

/**
 * Created by rzw2 on 2016/7/22.
 */
public interface ApiService {


    /**
     * 登录
     *
     * @param mobile   手机号
     * @param password 密码
     * @return LoginBean
     */
    @FormUrlEncoded
    @POST(IConstants.LOGIN)
    Call<ApiResponse<LoginBean>> toLogin(@Field("mobile") String mobile,
                                         @Field("password") String password,
                                         @Field("unionid") String unionid);

    /**
     * 登录
     *
     * @param mobile   手机号
     * @param password 密码
     * @return LoginBean
     */
    @FormUrlEncoded
    @POST(IConstants.LOGIN)
    Call<ApiResponse<LoginBean>> toLogin(@Field("mobile") String mobile,
                                         @Field("password") String password);

    /**
     * 注册
     *
     * @param mobile
     * @param password
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.REGISTER)
    Call<ApiResponse<RegisterBean>> toRegister(@Field("mobile") String mobile,
                                               @Field("password") String password,
                                               @Field("code") String code,
                                               @Field("unionid") String unionid);


    /**
     * 微信登录
     *
     * @param unionid
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.WXLOGIN)
    Call<ApiResponse<LoginBean>> toLoginByWx(@Field("unionid") String unionid);

    /**
     * 发送验证码
     *
     * @param mobile
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.VERIFICATION_CODE)
    Call<ApiResponse<VerificationBean>> sendVerificationCode(@Field("mobile") String mobile);


    /**
     * 退出登录
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.LOGIN_OUT)
    Call<ApiResponse<LoginBean>> toLogout(@Field("userId") String userId);

    /**
     * 获取用户信息
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.GET_USER_INFO)
    Call<ApiResponse<UserInfoBean>> getUserInfo(@Field("userId") String userId);

    /**
     * 头像上传
     *
     * @return
     */
    @Multipart
    @POST(IConstants.AVATAR_UPDATE)
    Call<ApiResponse<UserAvatarBean>> avatarUpdate(
            @Part("method") RequestBody method,
            @Part("key") RequestBody key,
            @Part("unixtime") RequestBody unixtime,
            @Part("token") RequestBody token,
            @Part("sign") RequestBody sign,
            @Part("suffix") RequestBody suffix,
            @Part MultipartBody.Part file);

    /**
     * 修改密码
     *
     * @param oldpass
     * @param newpass
     * @param newpass1
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.EDIT_PASSWORD)
    Call<ApiResponse> updateUserPassword(@Field("oldpass") String oldpass,
                                         @Field("newpass") String newpass,
                                         @Field("newpass1") String newpass1);

    /**
     * 找回密码
     *
     * @param mobile
     * @param password
     * @param repassword
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.FORGET_PASSWORD)
    Call<ApiResponse<ForgetPasswordBean>> forgetPassword(@Field("mobile") String mobile,
                                                         @Field("password") String password,
                                                         @Field("repassword") String repassword,
                                                         @Field("code") String code);


    /**
     * 获取爱好列表
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.GET_USER_HOBBY)
    Call<ApiResponse<List<UserHobbyBean>>> getUserHobby(@Field("userId") String userId);

    /**
     * 修改个人信息
     *
     * @param avatar
     * @param nickname
     * @param sex
     * @param height
     * @param weight
     * @param h_id
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.EDIT_USER_INFO)
    Call<ApiResponse> updateUserInfo(@Field("avatar") String avatar,
                                     @Field("nickname") String nickname,
                                     @Field("sex") String sex,
                                     @Field("height") String height,
                                     @Field("weight") String weight,
                                     @Field("h_id") String h_id);

    /**
     * 商家入驻
     *
     * @param stadiumname
     * @param stadiumaddress
     * @param stadiumcontacts
     * @param stadiumrel
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.JOIN_WE)
    Call<ApiResponse<JoinUsBean>> joinUs(@Field("stadiumname") String stadiumname,
                                         @Field("stadiumtype") String stadiumtype,
                                         @Field("stadiumaddress") String stadiumaddress,
                                         @Field("stadiumcontacts") String stadiumcontacts,
                                         @Field("stadiumtel") String stadiumrel);

    /**
     * 我的钱包
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.MY_WALLET)
    Call<ApiResponse<List<MyWalletBean>>> getMyWallet(@Field("userId") String userId);

    /**
     * 我的卡包
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.MY_CARD)
    Call<ApiResponse<List<MyCardBean>>> getMyCard(@Field("userId") String userId);

    /**
     * 我的邀请函
     *
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.MY_INVITED)
    Call<ApiResponse<List<MyInvitedBean>>> getMyInvited(@Field("userId") String userId);

    @FormUrlEncoded
    @POST(IConstants.SITE_LIST)
    Call<ApiResponse<SitesBean>> getHotSiteList(@Field("title") String title,
                                                @Field("order") String order,
                                                @Field("sort") String sort,
                                                @Field("page_size") int page_size,
                                                @Field("page_no") int page_no);

    @FormUrlEncoded
    @POST(IConstants.SITE_INFO)
    Call<ApiResponse<SitesBean.Site>> getSiteInfo(@Field("sid") String sid);

    @FormUrlEncoded
    @POST(IConstants.SITE_OFFER_LIST)
    Call<ApiResponse<List<SiteOfferBean>>> getSiteOfferList(@Field("sid") String sid);

    @FormUrlEncoded
    @POST(IConstants.SITE_PLACE_CATE_LIST)
    Call<ApiResponse<List<SitePlaceCateBean>>> getSitePlaceCate(@Field("sid") String sid);

    @FormUrlEncoded
    @POST(IConstants.SITE_PLACE_INFO_LIST)
    Call<ApiResponse<List<SitePlaceInfoBean>>> getSitePlaceInfoList(@Field("pcid") String pcid);

    @FormUrlEncoded
    @POST(IConstants.SITE_PLACE_BOOKED_LIST)
    Call<ApiResponse<List<SitePlaceBookedBean>>> getSitePlaceBookedList(@Field("pcid") String pcid, @Field("data") String data, @Field("n") int n);

    @FormUrlEncoded
    @POST(IConstants.SITE_TICKET_INFO)
    Call<ApiResponse<SiteTicketInfoBean>> getSiteTicketInfo(@Field("tid") String tid);

    /**
     * @param sid     体育馆id
     * @param money   充值数量
     * @param paytype 支付方式,bal余额;ali支付宝;wx微信;
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_CREATE_RECHARGE)
    Call<ApiResponse<CreateRechargeBean>> createRechargeOrder(@Field("sid") String sid,
                                                              @Field("money") String money,
                                                              @Field("paytype") String paytype);

    /**
     * @param id      门票ID
     * @param paytype 支付方式,bal余额;ali支付宝;wx微信;
     * @param times   订场类型订单,格式:开始时间戳:结束时间戳:门票ID,开始时间戳:结束时间戳:门票ID;
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_CREATE)
    Call<ApiResponse<CreateOrderBean>> createOrder(@Field("tid") String id,
                                                   @Field("paytype") String paytype,
                                                   @Field("times") String times,
                                                   @Field("isauto") String isauto);

    /**
     * @param pcid 场地分类ID
     * @param data 日期,年-月-日,格式:2017-8-8;
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.SITE_BOOKED_LIST)
    Call<ApiResponse<SiteBookedSelectedBean>> getSiteBookedSelcetedList(@Field("pcid") String pcid,
                                                                        @Field("data") String data);

    /**
     * @param order_sn      订单编号
     * @param type          订单类型11充值;21购票
     * @param sid           体育馆id
     * @param pid           场地id
     * @param tid           门票id
     * @param uaid          充值记录id
     * @param pay_status    支付状态0未支付,1支付成功
     * @param status        订单状态0失败,1正常,2用户关闭订单,3商家关闭订单
     * @param used          使用状态0未使用,1已使用,2已过期
     * @param access_status 是否入场0场外,1场内
     * @param use_stime     使用开始时间,时间戳
     * @param use_etime     使用结束时间,时间戳
     * @param order         排序字段:id,可选:type,sid,pid,uaid,pay_status,status,used,access_status,create_time,finish_time,star
     * @param sort          排序方式:默认desc,可选:desc,asc
     * @param page_size     每页数量,默认10
     * @param page_no       页数,默认1
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_LIST)
    Call<ApiResponse<List<OrderBean>>> getOrderList(@Field("order_sn") String order_sn,
                                                    @Field("type") String type,
                                                    @Field("sid") String sid,
                                                    @Field("pid") String pid,
                                                    @Field("tid") String tid,
                                                    @Field("uaid") String uaid,
                                                    @Field("pay_status") String pay_status,
                                                    @Field("status") String status,
                                                    @Field("used") String used,
                                                    @Field("access_status") String access_status,
                                                    @Field("use_stime") String use_stime,
                                                    @Field("use_etime") String use_etime,
                                                    @Field("order") String order,
                                                    @Field("sort") String sort,
                                                    @Field("page_size") String page_size,
                                                    @Field("page_no") String page_no);


    /**
     * @param oid 订单号
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_QRCODE)
    Call<ApiResponse<QrcodeAccess>> getAccessQrcode(@Field("oid") String oid);

    /**
     * @param order_sn 订单号
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_CANCEL)
    Call<ApiResponse> orderCancel(@Field("order_sn") String order_sn);

    /**
     * @param order_sn 订单level
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_STAR)
    Call<ApiResponse> orderStar(@Field("order_sn") String order_sn, @Field("star") int level);

    /**
     * @param apid 广告位id 22==上面 23=＝中间
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.AD_MAIN)
    Call<ApiResponse<List<AdMainBean>>> getMainAd(@Field("apid") String apid);

    /**
     * @param sid 体育馆id
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.AD_SITE)
    Call<ApiResponse<List<AdSiteBean>>> getSiteAd(@Field("sid") String sid);

    /**
     *
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.AD_AUTOBUYALERT)
    Call<ApiResponse<String>> getAutoBuyAlert(@Field("token") String token);

    /**
     * @param order_sn 体育馆id
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.WX_PAY)
    Call<ApiResponse<WxPayBean>> getWxData(@Field("order_sn") String order_sn);

    /**
     * @param order_sn
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_STATUS)
    Call<ApiResponse<OrderStatusBean>> getOrderStatus(@Field("order_sn") String order_sn);


    /**
     * @param order_sn
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.CREATE_SUPPLEMENT)
    Call<ApiResponse<OrderBean>> createSupplement(@Field("order_sn") String order_sn, @Field("order_sn") String payType, @Field("order_sn") String money);


    /**
     * @param sid
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.GET_MONEY_FROM_S)
    Call<ApiResponse<SidMoneyBean>> getSidMoney(@Field("sid") String sid);

    /**
     * @param  token
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.Get_CHURUCHANG)
    Call<ApiResponse<List<ChuRuOrderBean>>> getChuRuOrder(@Field("token") String token);


    /**
     *
     * @param bookid
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.ORDER_BOODCANCLE)
    Call<ApiResponse> orderBookCancle(@Field("bid") String bookid);

    /**
     * 获得新消息数量
     * @param token
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.USER_NEWMSGNUM)
    Call<ApiResponse<NewMsgNumBean>> getMsgNewNum(@Field("token") String token);

    /**
     * 消息列表
     * @param size
     * @param page
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.USER_NSERMSG)
    Call<ApiResponse<List<MyMsgBean>>> getMyMsgList(@Field("page_size") String size,@Field("page_no") String page);


    /**
     *
     * @param id
     * @return
     */
    @FormUrlEncoded
    @POST(IConstants.USER_ISREADING)
    Call<ApiResponse<OkBean>> ReadMsg(@Field("mid") String id);

}
